<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 缓存函数
      const memoize = function (func, content) {
        let cache = Object.create(null);
        content = content || this;
        return (...key) => {
          console.log(key, cache[key], cache);
          if (!cache[key]) {
            cache[key] = func.apply(content, key);
          }
          return cache[key];
        };
      };
      const add = (a, b) => a + b;
      const calc = memoize(add); //
      calc(10, 20); // 30
      calc(10, 20); // 30
      //虽然使用缓存效率是非常高的，但并不是所有场景都适用，因此千万不要极端的将所有函数都添加缓存
      //以下几种情况下，适合使用缓存：
      //·对于昂贵的函数调用，执行复杂计算的函数
      //·对于具有有限且高度重复输入范围的函数
      //·对于具有重复输入值的递归函数
      //·对于纯函数，即每次使用特定输入调用时返回相同输出的函数
    </script>
  </body>
</html>
